/* 
           @type 请求方式
           @url 请求路径
           @data 请求要发送的数据
        */
function ajax(opt) {
    return new Promise(resolve => {
        // 默认配置
        const defaultOpt = {
            type: 'get',
            url: '',
            data: {},
            success: function () { }
        }
        // 将默认参数和传过来参数合并
        const option = { ...defaultOpt, ...opt }
        // 处理传入的请求参数
        // {a:1,b:2} ==> '?a=1&b=2'
        /* 
            判断用户传入的参数是否符合规范
        */
        // 请求方式只支持get和post
        const typeArr = ['get', 'post']
        // 数组里面查找是否包含某个数据
        // if(typeArr.indexOf(option.type) === -1){
        if (!typeArr.includes(option.type)) {
            // 抛出异常
            throw Error('请求方式支持get和post')
        }
        // 请求路径必须是一个字符串类型
        if (Object.prototype.toString.call(option.url).toLowerCase() !== '[object string]') {
            throw Error('url must be a string')
        }
        // 请求参数必须是一个对象
        // 请求回调函数必须是一个函数类型
        let dataStr = '?'
        for (let key in option.data) {
            // console.log(key) // a b
            // console.log(option.data[key]) // 1  2
            dataStr += `${key}=${option.data[key]}&`
        }
        // console.log('转换后的参数', dataStr) // '?a=1&b=2&c=3&'
        dataStr = dataStr.slice(0, -1)
        // console.log('转换后的参数', dataStr) // '?a=1&b=2&c=3&'
        const xhr = new XMLHttpRequest
        if (option.type == 'get') {
            // './login.php' + '[Object object]'
            xhr.open(option.type, option.url + dataStr, true)
            xhr.send()
        } else {
            xhr.open(option.type, option.url, true)
            xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded')
            xhr.send(dataStr.slice(1))
        }
        xhr.onload = function () {
            // console.log(xhr.responseText)
           resolve(xhr.responseText)
        }
    })
}